﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

using BiffenModel;


namespace BiffenServiceLibary
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IRemoteBookingSystem
    {

        #region Person
        [OperationContract]
        int GetCustomerIDByPhone(string phone);
        [OperationContract]
        void NewCustomer(string fname, string lname, string street, string streetNo, int zipCode, string phone, string email, DateTime birthDate);
        [OperationContract]
        void NewEmployee(string fname, string lname, string street, string streetNo, int zipCode, string phone, string email, string password, string username);
        [OperationContract]
        void DeleteCustomer(int cusId);
        [OperationContract]
        void DeleteEmployee(int empId);
        [OperationContract]
        void EditCustomer(int id, string fname, string lname, string street, string streetNo, int zipCode, string phone, DateTime birthDate, string email);
        [OperationContract]
        void EditEmployee(int id, string fname, string lname, string street, string streetNo, int zipCode, string phone, string userName, string password, string email);
        [OperationContract]
        List<Customer> AllCustomers();
        [OperationContract]
        List<Employee> AllEmployee();
        [OperationContract]
        Customer GetOneCustomer(int id);
        [OperationContract]
        Employee GetOneEmployee(int id);
        [OperationContract]
        Employee GetEmployeeUserName(string userName);


        
        
        #endregion

        #region Movie
        [OperationContract]
        string getMovie(string title, int year);
        [OperationContract]
        void newMovie(string title, string director, string description, string genre, string timeLength, string picture, List<string> artists);
        [OperationContract]
        List<Movie> allMovies();
        [OperationContract]
        Movie getOneMovie(int movID);
        #endregion

        #region CinemaHall
        [OperationContract]
        void NewCinemaHall(int showID);
        [OperationContract]
        CinemaHall GetOneCinemaHall(int cinemaID);
        [OperationContract]
        void DeleteCinemaHall(int cinemaID);
        [OperationContract]
        void UpdateCinemaHall(int cinemaID, int showID);
        [OperationContract]
        List<CinemaHall> AllCinemas();
        #endregion

        #region Show
        [OperationContract]
        void NewShow(DateTime date, int movID);
        [OperationContract]
        Show GetOneShow(int showID);
        [OperationContract]
        void DeleteShow(int showID);
        [OperationContract]
        void UpdateShow(int showID, DateTime date, int movieID);
        [OperationContract]
        List<Show> AllShows();
        #endregion

        #region Booking
        [OperationContract]
        void NewBooking(DateTime date, int cinID, int showID, int perID, int seatNo);
        [OperationContract]
        void DeleteBooking(int bookID);
        [OperationContract]
        Booking GetOneBooking(int bookID);
        [OperationContract]
        void UpdateBooking(int bookID, DateTime date, int cinID, int showID, int perID, int seatNo);
        [OperationContract]
        List<Booking> AllBookings();
        #endregion
    }
}